package com.ruoyi.service;

import com.alibaba.fastjson2.JSONObject;

import java.util.List;
import java.util.Map;

// 艺龙接口标准接口调用
public interface GroundService {

    /**
     * 获取token
     * --------------------------------------------
     *
     * @return
     */
    String getLoginToken();


    /**
     * 自动化上线接口
     * --------------------------------------------
     *
     * @param supplierHotelId      供应商酒店id
     * @param supplierHotelName    供应商酒店名称
     * @param supplierRoomTypeId   供应商房型id
     * @param supplierRoomTypeName 供应商房型名称
     * @param supplierRatePlanId   供应商rpId
     * @param supplierRatePlanName 供应商rp名称
     * @param mHotelId             同程m酒店id
     * @param mHotelName           同程m酒店名称
     * @param mRoomId              同程m房型id
     * @param mRoomName            同程m房型名称
     * @param misSupplierId        同程供应商id（同程业务提供给供应商）
     * @return
     */
    JSONObject pushAutoMapping(String supplierHotelId, String supplierHotelName, String supplierRoomTypeId, String supplierRoomTypeName, String supplierRatePlanId, String supplierRatePlanName, String mHotelId, String mHotelName, String mRoomId, String mRoomName, String misSupplierId);

    /**
     * 自动化下线接口
     *
     * @param offlineType 下线类型, 下线酒店:hotel 下线房型:RoomType 下线RP:RatePlan
     * @param hotelId     酒店ID
     * @param houseId     房型ID
     * @param rpId        产品ID
     * @return
     */
    JSONObject offlineMapping(String offlineType, String hotelId, String houseId, String rpId);


    /**
     * 获取产品创建结果
     * --------------------------------------------
     *
     * @param hotelId 供应商酒店ID
     * @return
     */
    JSONObject getMapping(String hotelId);

    /**
     * 取消规则推送
     * --------------------------------------------
     * 数据维度为产品,没有推送的话艺龙默认为不可取消
     *
     * @param hotelCode        供应商酒店ID
     * @param rpId             供应商产品ID
     * @param beginDate        规则有效开始日期
     * @param canBeCanceled    该产品是否可以取消
     * @param cancelBeforeDays 提前x天前可以取消不扣费,默认0
     * @param cancelBeforeTime 提前x点前可以取消不扣费,例:传18 等于 18点前取消不扣费
     * @param hour             0点前几个小时之内不可以取消,例:传5 等于 19点之后不能取消
     * @param cashScaleType    扣费类型,1.按金额扣 2.按百分比扣 3.默认为首晚
     * @param endDate          规则有效结束日期
     * @param percentage       取消金额,先看cashScaleType,按百分比扣费则是百分比,按金额扣费则是金额,按首晚扣费则传0
     * @return
     */
    JSONObject updateRoomRatePlanPolicy(String hotelCode, String rpId, String beginDate, boolean canBeCanceled, int cancelBeforeDays, int cancelBeforeTime, int hour, int cashScaleType, String endDate, int percentage);

    /**
     * 房态信息推送(针对非保留房)
     * --------------------------------------------
     *
     * @param hotelCode           供应商酒店ID
     * @param beginDate           开始日期
     * @param endDate             结束日期
     * @param inventoryUpdateType 库存类型,可以默认为0
     * @param roomTypeCode        供应商房型ID集合
     * @param status              OPEN,CLOSE;
     * @return
     */
    JSONObject updateRoomTypeStatus(String hotelCode, String beginDate, String endDate, int inventoryUpdateType, List<String> roomTypeCode, String status);

    /**
     * 房量信息推送(针对保留房)
     * --------------------------------------------
     *
     * @param hotelCode           供应商酒店ID
     * @param amount              每日房量
     * @param arriveDate          房量开始日期
     * @param leaveDate           leaveDate
     * @param inventoryUpdateType 库存类型,默认1  0:直连超售 1:直连添加
     * @param roomTypeCode        供应商房型ID集合
     * @param status              OPEN,CLOSE;
     * @return
     */
    JSONObject updateRoomTypeAmount(String hotelCode, int amount, String arriveDate, String leaveDate, int inventoryUpdateType, List<String> roomTypeCode, String status);

    /**
     * 有效价格调用
     * -------------------------------------------
     *
     * @param hotelCode    供应商酒店编号
     * @param addBedPrice  加床价，无填0
     * @param currencyCode 币种
     * @param priceType    价格模式：SALE_PRICE:卖价、NET_PRICE:底价、COST_SALE_PRICE:底卖价
     * @param rateCode     供应商RPID
     * @param roomTypeCode 供应商房型ID
     * @return
     */
    JSONObject updatePriceInfoOpen(String hotelCode, int addBedPrice, String currencyCode, String priceType, String rateCode, String roomTypeCode, List<Map<String, Object>> lists);

    /**
     * 无效价格调用
     * --------------------------------------------
     *
     * @param hotelCode    供应商酒店编号
     * @param beginDate    开始时间
     * @param endDate      结束时间
     * @param rateCode     供应商RPID
     * @param roomTypeCode 供应商房型ID
     * @return
     */
    JSONObject updatePriceInfoClose(String hotelCode, String beginDate, String endDate, String rateCode, String roomTypeCode);


    /**
     * 30分钟免费取消
     *
     * @param hotelId 酒店ID
     * @param opType  无效、有效
     * @return
     */
    JSONObject processFreeCancelPolicy(String hotelId, int opType);

}
